<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Model–view–controller</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Model–view–controller rootpage-Model–view–controller skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Model–view–controller</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p><b>Model–view–controller</b> (<b>MVC</b>) is a software <a href="Architectural_pattern" title="Architectural pattern">architectural pattern</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> commonly used for developing <a href="User_interface" title="User interface">user interfaces</a> that divides the related program logic into three interconnected elements. These elements are:
</p>
<ul><li>the <b><a href="Model" title="Model">model</a></b>, the internal representations of information</li>
<li>the <b>view</b>, the interface that presents information to and accepts it from the user</li>
<li>the <b>controller</b>, the software linking the two.<sup id="cite_ref-Reenskaug_and_Coplien,_Artima,_2009_2-0" class="reference"><a href="#cite_note-Reenskaug_and_Coplien,_Artima,_2009-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup></li></ul>
<p>Traditionally used for desktop <a href="Graphical_user_interface" title="Graphical user interface">graphical user interfaces</a> (GUIs), this pattern became popular for designing <a href="Web_application" title="Web application">web applications</a>.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Popular programming languages have MVC frameworks that facilitate the implementation of the pattern.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>One of the seminal insights in the early development of graphical user interfaces, MVC became one of the first approaches to describe and implement software constructs in terms of their <a href="Single_responsibility_principle" class="mw-redirect" title="Single responsibility principle">responsibilities</a>.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p><p><a href="Trygve_Reenskaug" title="Trygve Reenskaug">Trygve Reenskaug</a> created MVC while working on <a href="Smalltalk" title="Smalltalk">Smalltalk</a>-79 as a visiting scientist at the Xerox <a href="PARC_(company)" title="PARC (company)">Palo Alto Research Center</a> (PARC) in the late 1970s.<sup id="cite_ref-page_trygver_6-0" class="reference"><a href="#cite_note-page_trygver-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-notes1_7-0" class="reference"><a href="#cite_note-notes1-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-FowlerPoEAA_8-0" class="reference"><a href="#cite_note-FowlerPoEAA-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap">: <span title="Page: 330
Quotation: "Model View Controller...started as a framework developed by Trygve Reenskaug for the Smalltalk platform in the late 1970s."" class="tooltip tooltip-dashed" style="border-bottom: 1px dashed;">330</span> </sup> He wanted a pattern that could be used to structure any program where users interact with a large, convoluted <a href="Data_set" title="Data set">data set</a>. His design initially had four parts: <a href="Model" title="Model">Model</a>, view, thing, and editor. After discussing it with the other Smalltalk <a href="Software_development" title="Software development">developers</a>, he and the rest of the group settled on model, view, and controller instead.<sup id="cite_ref-page_trygver_6-1" class="reference"><a href="#cite_note-page_trygver-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p>In their final design, a model represents some part of the program purely and intuitively. A view is a visual representation of a model, retrieving data from the model to display to the user and passing requests back and forth between the user and the model. A controller is an organizational part of the user interface that lays out and coordinates multiple Views on the screen, and which receives user input and sends the appropriate messages to its underlying Views. This design also includes an Editor as a specialized kind of controller used to modify a particular view, and which is created through that view.<sup id="cite_ref-page_trygver_6-2" class="reference"><a href="#cite_note-page_trygver-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p>Smalltalk-80 supports a version of MVC that evolved from this one.<sup id="cite_ref-page_trygver_6-3" class="reference"><a href="#cite_note-page_trygver-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> It provides abstract <code>view</code> and <code>controller</code> <a href="Class_(computer_programming)" title="Class (computer programming)">classes</a> as well as various concrete subclasses of each that represent different generic <a href="Software_widget" title="Software widget">widgets</a>. In this scheme, a <code>View</code> represents some way of displaying information to the user, and a <code>controller</code> represents some way for the user to interact with a <code>view</code>. A <code>view</code> is also coupled to a model object, but the structure of that object is left up to the application <a href="Programmer" title="Programmer">programmer</a>. The Smalltalk-80 environment also includes an "MVC Inspector", a development tool for viewing the structure of a given model, view, and controller side-by-side.<sup id="cite_ref-smalltalk_redbook_9-0" class="reference"><a href="#cite_note-smalltalk_redbook-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p><p>In 1988, an article in <i><a href="The_Journal_of_Object_Technology" title="The Journal of Object Technology">The Journal of Object Technology</a></i> (JOT) by two ex-PARC employees presented MVC as a general "<a href="Programming_paradigm" title="Programming paradigm">programming paradigm</a> and methodology" for Smalltalk-80 developers. However, their scheme differed from both Reenskaug et al.'s and that presented by the Smalltalk-80 reference books. They defined a view as covering any graphical concern, with a controller being a more abstract, generally invisible object that receives user input and interacts with one or many views and only one model.<sup id="cite_ref-art1_10-0" class="reference"><a href="#cite_note-art1-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p><p>The MVC pattern subsequently evolved,<sup id="cite_ref-Fowler_11-0" class="reference"><a href="#cite_note-Fowler-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> giving rise to variants such as <a href="Hierarchical_model%E2%80%93view%E2%80%93controller" title="Hierarchical model–view–controller">hierarchical model–view–controller</a> (HMVC), <a href="Model%E2%80%93view%E2%80%93adapter" title="Model–view–adapter">model–view–adapter</a> (MVA), <a href="Model%E2%80%93view%E2%80%93presenter" title="Model–view–presenter">model–view–presenter</a> (MVP), <a href="Model%E2%80%93view%E2%80%93viewmodel" title="Model–view–viewmodel">model–view–viewmodel</a> (MVVM), and others that adapted MVC to different contexts.
</p><p>The use of the MVC pattern in <a href="Web_application" title="Web application">web applications</a> grew after the introduction of <a href="NeXT" title="NeXT">NeXT</a>'s <a href="WebObjects" title="WebObjects">WebObjects</a> in 1996, which was originally written in <a href="Objective-C" title="Objective-C">Objective-C</a> (that borrowed heavily from Smalltalk) and helped enforce MVC principles. Later, the MVC pattern became popular with Java developers when WebObjects was ported to <a href="Java_(programming_language)" title="Java (programming language)">Java</a>. Later frameworks for Java, such as <a href="Spring_Framework" title="Spring Framework">Spring</a> (released in October 2002), continued the strong bond between Java and MVC.
</p><p>In 2003, <a href="Martin_Fowler_(software_engineer)" title="Martin Fowler (software engineer)">Martin Fowler</a> published <i>Patterns of Enterprise Application Architecture</i>, which presented MVC as a pattern where an "input controller" receives a request, sends the appropriate messages to a model object, takes a response from the model object, and passes the response to the appropriate view for display.<sup id="cite_ref-FowlerPoEAA_8-1" class="reference"><a href="#cite_note-FowlerPoEAA-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap">: <span title="Page: 56
Quotation: "A request comes in to an input controller...It then forwards the business logic to an appropriate model object. The model object talks to the data source...it then returns control to the input controller, which...decides which view is needed to display the response. It then passes control, together with the response data, to the view."" class="tooltip tooltip-dashed" style="border-bottom: 1px dashed;">56</span> </sup> This is close to the approach taken by the <a href="Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a> web application framework (August 2004), which has the client send requests to the server via an in-<a href="Web_browser" title="Web browser">browser</a> view, these requests are handled by a controller on the server, and the controller communicates with the appropriate model objects.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> The <a href="Django_(web_framework)" title="Django (web framework)">Django</a> framework (July 2005, for <a href="Python_(programming_language)" title="Python (programming language)">Python</a>) put forward a similar "model-template-view" (MTV) take on the pattern, in which a view retrieves data from models and passes it to templates for display.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> Both Rails and Django debuted with a strong emphasis on rapid deployment, which increased MVC's popularity outside the traditional enterprise environment in which it has long been popular.
</p>
<div class="mw-heading mw-heading2"><h2 id="Components">Components</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Model">Model</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">See also: <a href="Data_model" title="Data model">Data model</a></div>
<p>The central component of the pattern. It is the application's dynamic <a href="Data_structure" title="Data structure">data structure</a>, independent of the user interface.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> It directly manages the data, logic and rules of the application. In Smalltalk-80, the design of a model type is left entirely to the programmer.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> With WebObjects, Rails, and Django, a model type typically <a href="Object%E2%80%93relational_mapping" title="Object–relational mapping">represents</a> a table in the application's <a href="Database" title="Database">database</a>.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> The model is essential for keeping the data organized and consistent. It ensures that the application's data behaves according to the defined rules and logic.
</p>
<div class="mw-heading mw-heading3"><h3 id="View">View</h3></div>
<p>Any representation of information such as a <a href="Chart" title="Chart">chart</a>, diagram or table. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for <a href="Accountant" title="Accountant">accountants</a>.
</p><p>In Smalltalk-80, a view is just a visual representation of a model, and does not handle user input.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> With WebObjects, a view represents a complete user interface element such as a menu or button, and does receive input from the user.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> In both Smalltalk-80 and WebObjects, however, views are meant to be general-purpose and <a href="Composability" title="Composability">composable</a>.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup>
</p><p>With Rails and Django, the role of the view is played by <a href="HTML" title="HTML">HTML</a> templates, so in their scheme a view specifies an in-browser user interface rather than representing a user interface widget directly.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> (Django opts to call this kind of object a "template" in light of this.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup>) This approach puts relatively less emphasis on small, composable views; a typical Rails view has a <a href="Cardinality_(data_modeling)" title="Cardinality (data modeling)">one-to-one relationship</a> with a controller action.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p><p>Smalltalk-80 views communicate with both a model and a controller,<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> whereas with WebObjects, a view talks only to a controller, which then talks to a model.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> With Rails and Django, a view/template is used by a controller/view when preparing a response to the client.<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-djangoviewtemplfaq_30-0" class="reference"><a href="#cite_note-djangoviewtemplfaq-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Controller">Controller</h3></div>
<p>Accepts input and converts it to commands for the model or view.<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</p><p>A Smalltalk-80 controller handles user input events, such as button presses or mouse movement.<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> At any given time, each controller has one associated view and model, although one model object may hear from many different controllers. Only one controller, the "active" controller, receives user input at any given time; a global <a href="Window_manager" title="Window manager">window manager</a> object is responsible for setting the current active controller. If user input prompts a change in a model, the controller will signal the model to change, but the model is then responsible for telling its views to update.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup>
</p><p>In WebObjects, the views handle user input, and the controller mediates between the views and the models. There may be only one controller per application, or one controller per window. Much of the application-specific logic is found in the controller.<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
</p><p>In Rails, requests arriving at the on-server application from the client are sent to a "router", which maps the request to a specific method of a specific controller. Within that method, the controller interacts with the request data and any relevant model objects and prepares a response using a view. Conventionally, each view has an associated controller; for example, if the application had a <code>client</code> view, it would typically have an associated <code>Clients</code> controller as well. However, developers are free to make other kinds of controllers if they wish.<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup>
</p><p>Django calls the object playing this role a "view" instead of a controller.<sup id="cite_ref-djangoviewtemplfaq_30-1" class="reference"><a href="#cite_note-djangoviewtemplfaq-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> A Django view is a function that receives a web request and returns a web response. It may use templates to create the response.<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Interactions">Interactions</h2></div>
<p>In addition to dividing the application into a model, a view and a controller component, the MVC <a href="Software_design_pattern" title="Software design pattern">design pattern</a> defines the interactions between these three components :<sup id="cite_ref-posa_37-0" class="reference"><a href="#cite_note-posa-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>The model is responsible for managing the data of the application. It receives user input from the controller.</li>
<li>The view renders presentation of the model in a particular format.</li>
<li>The controller responds to the user input and performs interactions on the data model objects. The controller receives the input, optionally validates it and then passes the input to the model.</li></ul>
<p>As with other software patterns, MVC expresses the "core of the solution" to a problem while allowing it to be adapted for each system.<sup id="cite_ref-gof_38-0" class="reference"><a href="#cite_note-gof-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup> Particular MVC designs can vary significantly from the traditional description here.<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Motivation">Motivation</h2></div>
<p>As <a href="Alan_Kay" title="Alan Kay">Alan Kay</a> wrote in 2003, the original motivation behind the MVC was to allow creation of a graphical interface for any object.<sup id="cite_ref-:0_40-0" class="reference"><a href="#cite_note-:0-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> That was outlined in detail in Richard Pawson's book <i><a href="Naked_objects" title="Naked objects">Naked Objects</a></i>.<sup id="cite_ref-:0_40-1" class="reference"><a href="#cite_note-:0-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup>
</p><p>Trygve Reenskaug, originator of MVC at PARC, has written that "MVC was conceived as a general solution to the problem of users controlling a large and complex data set."<sup id="cite_ref-page_trygver_6-4" class="reference"><a href="#cite_note-page_trygver-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p>In their 1991 guide <i>Inside Smalltalk</i>, <a href="Carleton_University" title="Carleton University">Carleton University</a> computer science professors Wilf LaLonde and John Pugh described the advantages of Smalltalk-80-style MVC as:
</p>
<ul><li>independence of presentation and data, e.g. multiple views on one model simultaneously,</li>
<li>composable presentation widgets, e.g. one view used as a subview of another,</li>
<li>switchable input modes, by swapping one controller out for another during <a href="Software_execution" class="mw-redirect" title="Software execution">runtime</a>, and</li>
<li>independence of input and output processing, via the <a href="Separation_of_concerns" title="Separation of concerns">separate responsibilities</a> of controllers and views.<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Use_in_web_applications">Use in web applications</h2></div>
<p>Although originally developed for <a href="Desktop_computer" title="Desktop computer">desktop computing</a>, MVC has been widely adopted as a design for <a href="World_Wide_Web" title="World Wide Web">World Wide Web</a> applications in major <a href="Programming_language" title="Programming language">programming languages</a>. Several <a href="Web_framework" title="Web framework">web frameworks</a> have been created that enforce the pattern. These <a href="Software_framework" title="Software framework">software frameworks</a> vary in their interpretations, mainly in the way that the MVC responsibilities are divided between the <a href="Client%E2%80%93server_model" title="Client–server model">client and server</a>.<sup id="cite_ref-leff_42-0" class="reference"><a href="#cite_note-leff-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> Early MVC frameworks took a <a href="Thin_client" title="Thin client">thin client</a> approach that placed almost the entire model, view and controller logic on the server. In this approach, the client sends <a href="Hyperlink" title="Hyperlink">hyperlink</a> requests or <a href="Form_(web)" class="mw-redirect" title="Form (web)">form</a> submissions to the controller and then receives a complete and updated <a href="Web_page" title="Web page">web page</a> (or other document) from the view; the model exists entirely on the server.<sup id="cite_ref-leff_42-1" class="reference"><a href="#cite_note-leff-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> Later frameworks have allowed the MVC components to execute partly on the client, using <a href="Ajax_(programming)" title="Ajax (programming)">Ajax</a> to synchronize data.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1184024115">
/* start https://en.wikipedia.org/ */
.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}
/* end https://en.wikipedia.org/ */
</style><div class="div-col" style="column-width: 20em;">
<ul><li><a href="Action%E2%80%93domain%E2%80%93responder" title="Action–domain–responder">Action–domain–responder</a></li>
<li><a href="Bistro_Framework" title="Bistro Framework">Bistro Framework</a></li>
<li><a href="Entity%E2%80%93control%E2%80%93boundary" title="Entity–control–boundary">Entity–control–boundary pattern</a></li>
<li><a href="Hierarchical_model%E2%80%93view%E2%80%93controller" title="Hierarchical model–view–controller">Hierarchical model–view–controller</a></li>
<li><a href="Model%E2%80%93view%E2%80%93adapter" title="Model–view–adapter">Model–view–adapter</a></li>
<li><a href="Model%E2%80%93view%E2%80%93presenter" title="Model–view–presenter">Model–view–presenter</a></li>
<li><a href="Model%E2%80%93view%E2%80%93viewmodel" title="Model–view–viewmodel">Model–view–viewmodel</a></li>
<li><a href="Multitier_architecture" title="Multitier architecture">Multitier architecture</a></li>
<li><a href="Observer_pattern" title="Observer pattern">Observer pattern</a></li>
<li><a href="Presentation%E2%80%93abstraction%E2%80%93control" title="Presentation–abstraction–control">Presentation–abstraction–control</a></li>
<li><a href="Separation_of_concerns" title="Separation of concerns">Separation of concerns</a></li>
<li><a href="Strategy_pattern" title="Strategy pattern">Strategy pattern</a></li></ul></div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=o_TH-Y78tt4&t=1667">"The Principles of Clean Architecture by Uncle Bob Martin"</a>. <i><a href="YouTube" title="YouTube">YouTube</a></i>. 15 December 2015.</cite></span>
</li>
<li id="cite_note-Reenskaug_and_Coplien,_Artima,_2009-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-Reenskaug_and_Coplien,_Artima,_2009_2-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFReenskaugCoplien2009" class="citation web cs1">Reenskaug, Trygve; Coplien, James O. (20 March 2009). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090323032904/https://www.artima.com/articles/dci_vision.html">"The DCI Architecture: A New Vision of Object-Oriented Programming"</a>. <i>Artima Developer</i>. Archived from <a rel="nofollow" class="external text" href="https://www.artima.com/articles/dci_vision.html">the original</a> on 23 March 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">3 August</span> 2019</span>. <q>More deeply, the framework exists to separate the representation of information from user interaction.</q></cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text">Burbeck (1992): "... the user input, the modeling of the external world, and the visual feedback to the user are explicitly separated and handled by three types of object."</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFDavis" class="citation news cs1">Davis, Ian. <a rel="nofollow" class="external text" href="http://blog.iandavis.com/2008/12/what-are-the-benefits-of-mvc/">"What Are The Benefits of MVC?"</a>. <i>Internet Alchemy</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-11-29</span></span>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://c2.com/cgi/wiki?ModelViewControllerHistory">Model–View–Controller History</a>. C2.com (2012-05-11). Retrieved on 2013-12-09.</span>
</li>
<li id="cite_note-page_trygver-6"><span class="mw-cite-backlink">^ <a href="#cite_ref-page_trygver_6-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-page_trygver_6-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-page_trygver_6-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-page_trygver_6-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-page_trygver_6-4"><sup><i><b>e</b></i></sup></a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html">Notes and Historical documents</a> from Trygve Reenskaug, inventor of MVC.</span>
</li>
<li id="cite_note-notes1-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-notes1_7-0">^</a></b></span> <span class="reference-text">"A note on DynaBook requirements", Trygve Reenskaug, 22 March 1979, <a rel="nofollow" class="external text" href="https://wayback.archive-it.org/10370/20180425072145/http://folk.uio.no/trygver/1979/sysreq/SysReq.pdf">SysReq.pdf</a>.</span>
</li>
<li id="cite_note-FowlerPoEAA-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-FowlerPoEAA_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-FowlerPoEAA_8-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFFowler2003" class="citation book cs1"><a href="Martin_Fowler_(software_engineer)" title="Martin Fowler (software engineer)">Fowler, Martin</a> (2003). <i>Patterns of Enterprise Application Architecture</i>. Pearson Education, Inc. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-321-12742-0</bdi>.</cite></span>
</li>
<li id="cite_note-smalltalk_redbook-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-smalltalk_redbook_9-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFGoldberg1984" class="citation book cs1"><a href="Adele_Goldberg_(computer_scientist)" title="Adele Goldberg (computer scientist)">Goldberg, Adele</a> (1984). <i>Smalltalk-80: The Interactive Programming Environment</i>. Addison-Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-201-11372-4</bdi>.</cite></span>
</li>
<li id="cite_note-art1-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-art1_10-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFKrasnerPope1988" class="citation journal cs1">Krasner, Glenn E.; Pope, Stephen T. (Aug–Sep 1988). <a rel="nofollow" class="external text" href="http://dl.acm.org/citation.cfm?id=50757.50759">"A cookbook for using the model–view controller user interface paradigm in Smalltalk-80"</a>. <i><a href="The_Journal_of_Object_Technology" title="The Journal of Object Technology">The Journal of Object Technology</a></i>. <b>1</b> (3). SIGS Publications: <span class="nowrap">26–</span>49.</cite> Also published as "<a rel="nofollow" class="external text" href="https://web.archive.org/web/20100921030808/http://www.itu.dk/courses/VOP/E2005/VOP2005E/8_mvc_krasner_and_pope.pdf">A Description of the Model–View–Controller User Interface Paradigm in the Smalltalk-80 System</a>" (Report), ParcPlace Systems; Retrieved 2012-06-05.</span>
</li>
<li id="cite_note-Fowler-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-Fowler_11-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://martinfowler.com/eaaDev/uiArchs.html">The evolution of MVC and other UI architectures</a> from Martin Fowler.</span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://guides.rubyonrails.org/">"Ruby on Rails Guides"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">March 19,</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.djangoproject.com/en/4.0/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names">"Django FAQ: Django appears to be a MVC framework, but you call the Controller the "view", and the View the "template". How come you don't use the standard names?"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">March 19,</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text">Burbeck, Steve (1992) <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120729161926/http://st-www.cs.illinois.edu/users/smarch/st-docs/mvc.html">Applications Programming in Smalltalk-80:How to use Model–View–Controller (MVC)</a></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite id="CITEREFLaLondePugh1991" class="citation book cs1">LaLonde, Wilf R.; Pugh, John R. (1991). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=RRkiAQAAIAAJ"><i>Inside Smalltalk</i></a>. U.S.A.: Prentice-Hall Inc. p. 8. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-467309-3</bdi>. <q>The model can be any object without restriction.</q></cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><a rel="nofollow" class="external text" href="https://developer.apple.com/library/archive/documentation/LegacyTechnologies/WebObjects/WebObjects_5/WebObjectsOverview/WebObjectsOverview.pdf"><i>WebObjects System Overview</i></a> <span class="cs1-format">(PDF)</span>. Cupertino, CA: Apple Computer, Inc. May 2001. p. 28. <q>In WebObjects, a model establishes and maintains a correspondence between an enterprise object class and data stored in a relational database.</q></cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://guides.rubyonrails.org/active_record_basics.html">"Active Record Basics"</a>. <i>Rails Guides</i><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>. <q>This will create a <code>Product</code> model, mapped to a products table at the database.</q></cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.djangoproject.com/en/4.1/topics/db/models/">"Models"</a>. <i>Django Documentation</i><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>. <q>Generally, each model maps to a single database table.</q></cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite id="CITEREFLaLondePugh1991" class="citation book cs1">LaLonde, Wilf R.; Pugh, John R. (1991). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=RRkiAQAAIAAJ"><i>Inside Smalltalk</i></a>. U.S.A.: Prentice-Hall Inc. p. 8. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-467309-3</bdi>. <q>The view is responsible for providing a visual representation of the object.</q></cite></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><a rel="nofollow" class="external text" href="https://developer.apple.com/library/archive/documentation/LegacyTechnologies/WebObjects/WebObjects_5/WebObjectsOverview/WebObjectsOverview.pdf"><i>WebObjects System Overview</i></a> <span class="cs1-format">(PDF)</span>. Cupertino, CA: Apple Computer, Inc. May 2001. p. 28. <q>View objects represent things visible on the user interface (windows, for example, or buttons).</q></cite></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite id="CITEREFLaLondePugh1991" class="citation book cs1">LaLonde, Wilf R.; Pugh, John R. (1991). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=RRkiAQAAIAAJ"><i>Inside Smalltalk</i></a>. U.S.A.: Prentice-Hall Inc. p. 8. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-467309-3</bdi>. <q>[MVC] permits views to be used as parts for assembly into larger units; new kinds of views can be constructed using existing views as subviews.</q></cite></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><a rel="nofollow" class="external text" href="https://developer.apple.com/library/archive/documentation/LegacyTechnologies/WebObjects/WebObjects_5/WebObjectsOverview/WebObjectsOverview.pdf"><i>WebObjects System Overview</i></a> <span class="cs1-format">(PDF)</span>. Cupertino, CA: Apple Computer, Inc. May 2001. p. 28. <q>View objects tend to be very reusable and so provide consistency between applications.</q></cite></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://guides.rubyonrails.org/action_view_overview.html">"Action View Overview"</a>. <i>Rails Guides</i><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>. <q>Action View templates are written using embedded Ruby in tags mingled with HTML.</q></cite></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.djangoproject.com/en/4.1/topics/templates/">"Templates"</a>. <i>Django Documentation</i><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>. <q>A template contains the static parts of the desired HTML output as well as some special syntax describing how dynamic content will be inserted.</q></cite></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.djangoproject.com/en/4.0/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names">"Django FAQ: Django appears to be a MVC framework, but you call the Controller the "view", and the View the "template". How come you don't use the standard names?"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://guides.rubyonrails.org/action_view_overview.html">"Action View Overview"</a>. <i>Rails Guides</i><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>. <q>Typically, the views share their name with the associated controller action...</q></cite></span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><cite id="CITEREFLaLondePugh1991" class="citation book cs1">LaLonde, Wilf R.; Pugh, John R. (1991). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=RRkiAQAAIAAJ"><i>Inside Smalltalk</i></a>. U.S.A.: Prentice-Hall Inc. p. 9. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-467309-3</bdi>. <q>...the view knows explicitly about the model and the controller.</q></cite></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><a rel="nofollow" class="external text" href="https://developer.apple.com/library/archive/documentation/LegacyTechnologies/WebObjects/WebObjects_5/WebObjectsOverview/WebObjectsOverview.pdf"><i>WebObjects System Overview</i></a> <span class="cs1-format">(PDF)</span>. Cupertino, CA: Apple Computer, Inc. May 2001. p. 28. <q>Acting as a mediator between Model objects and View objects in an application is a Controller object.</q></cite></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://guides.rubyonrails.org/action_view_overview.html">"Action View Overview"</a>. <i>Rails Guides</i><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>. <q>In Rails, web requests are handled by action controller and action view. Typically, action controller is concerned with communicating with the database and performing CRUD actions where necessary. Action View is then responsible for compiling the response.</q></cite></span>
</li>
<li id="cite_note-djangoviewtemplfaq-30"><span class="mw-cite-backlink">^ <a href="#cite_ref-djangoviewtemplfaq_30-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-djangoviewtemplfaq_30-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.djangoproject.com/en/4.0/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names">"Django FAQ: Django appears to be a MVC framework, but you call the Controller the "view", and the View the "template". How come you don't use the standard names?"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>. <q>In Django, a 'view' describes which data is presented, but a view normally delegates to a template, which describes how the data is presented.</q></cite></span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.codeproject.com/Articles/25057/Simple-Example-of-MVC-Model-View-Controller-Design">Simple Example of MVC (Model–View–Controller) Architectural Pattern for Abstraction</a></span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><cite id="CITEREFLaLondePugh1991" class="citation book cs1">LaLonde, Wilf R.; Pugh, John R. (1991). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=RRkiAQAAIAAJ"><i>Inside Smalltalk</i></a>. U.S.A.: Prentice-Hall Inc. p. 8. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-467309-3</bdi>. <q>The controller is responsible for interfacing between the user and the model/view. It interprets keyboard characters along with mouse movements and clicking.</q></cite></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><cite id="CITEREFLaLondePugh1991" class="citation book cs1">LaLonde, Wilf R.; Pugh, John R. (1991). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=RRkiAQAAIAAJ"><i>Inside Smalltalk</i></a>. U.S.A.: Prentice-Hall Inc. p. 11. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-467309-3</bdi>.</cite></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><a rel="nofollow" class="external text" href="https://developer.apple.com/library/archive/documentation/LegacyTechnologies/WebObjects/WebObjects_5/WebObjectsOverview/WebObjectsOverview.pdf"><i>WebObjects System Overview</i></a> <span class="cs1-format">(PDF)</span>. Cupertino, CA: Apple Computer, Inc. May 2001. p. 28.</cite></span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://guides.rubyonrails.org/action_view_overview.html">"Action View Overview"</a>. <i>Rails Guides</i><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>. <q>Typically, the views share their name with the associated controller action...</q></cite></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.djangoproject.com/en/4.1/topics/http/views/">"Writing views"</a>. <i>Django Documentation</i><span class="reference-accessdate">. Retrieved <span class="nowrap">October 27,</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-posa-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-posa_37-0">^</a></b></span> <span class="reference-text">Buschmann, Frank (1996) <i>Pattern-Oriented Software Architecture</i>.</span>
</li>
<li id="cite_note-gof-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-gof_38-0">^</a></b></span> <span class="reference-text">Gamma, Erich et al. (1994) <i>Design Patterns</i></span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text">Moore, Dana et al. (2007) <i>Professional Rich Internet Applications: Ajax and Beyond</i>: "Since the origin of MVC, there have been many interpretations of the pattern. The concept has been adapted and applied in very different ways to a wide variety of systems and architectures."</span>
</li>
<li id="cite_note-:0-40"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_40-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_40-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFAlan_Kay2003" class="citation web cs1">Alan Kay (23 May 2003). <a rel="nofollow" class="external text" href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2003-May/058824.html">"is squeak really object oriented ?"</a>. <i>Squeak Foundation mailing list</i><span class="reference-accessdate">. Retrieved <span class="nowrap">26 October</span> 2021</span>.</cite></span>
</li>
<li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><cite id="CITEREFLaLondePugh1991" class="citation book cs1">LaLonde, Wilf R.; Pugh, John R. (1991). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=RRkiAQAAIAAJ"><i>Inside Smalltalk</i></a>. Vol. 2. U.S.A.: Prentice-Hall Inc. pp. <span class="nowrap">8–</span>9. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-467309-3</bdi>.</cite></span>
</li>
<li id="cite_note-leff-42"><span class="mw-cite-backlink">^ <a href="#cite_ref-leff_42-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-leff_42-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFLeffRayfield2001" class="citation conference cs1">Leff, Avraham; Rayfield, James T. (September 2001). <i>Web-Application Development Using the Model/View/Controller Design Pattern</i>. IEEE Enterprise Distributed Object Computing Conference. pp. <span class="nowrap">118–</span>127.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="Bibliography">Bibliography</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1290876196">
/* start https://en.wikipedia.org/ */
.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:var(--background-color-interactive-subtle,#f8f9fa);display:flow-root}.mw-parser-output .infobox .side-box{font-size:100%}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1237033735">
/* start https://en.wikipedia.org/ */
@media print{body.ns-0 .mw-parser-output .sistersitebox{display:none!important}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}
/* end https://en.wikipedia.org/ */
</style><div class="side-box side-box-right sistersitebox"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */
.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}
/* end https://en.wikipedia.org/ */
</style>
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">Wikibooks has a book on the topic of: <i><b><a href="https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Model%E2%80%93view%E2%80%93controller" class="extiw external" title="wikibooks:Computer Science Design Patterns/Model–view–controller">Computer Science Design Patterns/Model–view–controller</a></b></i></div></div>
</div>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Software_design_patterns225" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Software_design_patterns225" style="font-size:114%;margin:0 4em"><a href="Software_design_pattern" title="Software design pattern">Software design patterns</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Design_Patterns" title="Design Patterns">Gang of Four<br>patterns</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Creational_pattern" title="Creational pattern">Creational</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Abstract_factory_pattern" title="Abstract factory pattern">Abstract factory</a></li>
<li><a href="Builder_pattern" title="Builder pattern">Builder</a></li>
<li><a href="Factory_method_pattern" title="Factory method pattern">Factory method</a></li>
<li><a href="Prototype_pattern" title="Prototype pattern">Prototype</a></li>
<li><a href="Singleton_pattern" title="Singleton pattern">Singleton</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Structural_pattern" title="Structural pattern">Structural</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Adapter_pattern" title="Adapter pattern">Adapter</a></li>
<li><a href="Bridge_pattern" title="Bridge pattern">Bridge</a></li>
<li><a href="Composite_pattern" title="Composite pattern">Composite</a></li>
<li><a href="Decorator_pattern" title="Decorator pattern">Decorator</a></li>
<li><a href="Facade_pattern" title="Facade pattern">Facade</a></li>
<li><a href="Flyweight_pattern" title="Flyweight pattern">Flyweight</a></li>
<li><a href="Proxy_pattern" title="Proxy pattern">Proxy</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Behavioral_pattern" title="Behavioral pattern">Behavioral</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Chain-of-responsibility_pattern" title="Chain-of-responsibility pattern">Chain of responsibility</a></li>
<li><a href="Command_pattern" title="Command pattern">Command</a></li>
<li><a href="Interpreter_pattern" title="Interpreter pattern">Interpreter</a></li>
<li><a href="Iterator_pattern" title="Iterator pattern">Iterator</a></li>
<li><a href="Mediator_pattern" title="Mediator pattern">Mediator</a></li>
<li><a href="Memento_pattern" title="Memento pattern">Memento</a></li>
<li><a href="Observer_pattern" title="Observer pattern">Observer</a></li>
<li><a href="State_pattern" title="State pattern">State</a></li>
<li><a href="Strategy_pattern" title="Strategy pattern">Strategy</a></li>
<li><a href="Template_method_pattern" title="Template method pattern">Template method</a></li>
<li><a href="Visitor_pattern" title="Visitor pattern">Visitor</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Concurrency_pattern" title="Concurrency pattern">Concurrency<br>patterns</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Active_object" title="Active object">Active object</a></li>
<li><a href="Balking_pattern" title="Balking pattern">Balking</a></li>
<li><a href="Binding_properties_pattern" title="Binding properties pattern">Binding properties</a></li>
<li><a href="Double-checked_locking" title="Double-checked locking">Double-checked locking</a></li>
<li><a href="Asynchronous_method_invocation" title="Asynchronous method invocation">Event-based asynchronous</a></li>
<li><a href="Guarded_suspension" title="Guarded suspension">Guarded suspension</a></li>
<li><a href="Join-pattern" title="Join-pattern">Join</a></li>
<li><a href="Lock_(computer_science)" title="Lock (computer science)">Lock</a></li>
<li><a href="Monitor_(synchronization)" title="Monitor (synchronization)">Monitor</a></li>
<li><a href="Proactor_pattern" title="Proactor pattern">Proactor</a></li>
<li><a href="Reactor_pattern" title="Reactor pattern">Reactor</a></li>
<li><a href="Readers%E2%80%93writer_lock" title="Readers–writer lock">Read–write lock</a></li>
<li><a href="Scheduler_pattern" class="mw-redirect" title="Scheduler pattern">Scheduler</a></li>
<li><a href="Scheduled-task_pattern" title="Scheduled-task pattern">Scheduled-task pattern</a></li>
<li><a href="Semaphore_(programming)" title="Semaphore (programming)">Semaphore</a></li>
<li><a href="Thread_pool" title="Thread pool">Thread pool</a></li>
<li><a href="Thread-local_storage" title="Thread-local storage">Thread-local storage</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Architectural_pattern" title="Architectural pattern">Architectural<br>patterns</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Front_controller" title="Front controller">Front controller</a></li>
<li><a href="Interceptor_pattern" title="Interceptor pattern">Interceptor</a></li>
<li>
<ul><li><a href="Model%E2%80%93view%E2%80%93presenter" title="Model–view–presenter">MVP</a></li>
<li><a href="Model%E2%80%93view%E2%80%93viewmodel" title="Model–view–viewmodel">MVVM</a></li></ul></li>
<li><a href="Action%E2%80%93domain%E2%80%93responder" title="Action–domain–responder">ADR</a></li>
<li><a href="Entity_component_system" title="Entity component system">ECS</a></li>
<li><a href="Multitier_architecture" title="Multitier architecture"><i>n</i>-tier</a></li>
<li><a href="Specification_pattern" title="Specification pattern">Specification</a></li>
<li><a href="Publish%E2%80%93subscribe_pattern" title="Publish–subscribe pattern">Publish–subscribe</a></li>
<li><a href="Naked_objects" title="Naked objects">Naked objects</a></li>
<li><a href="Service_locator_pattern" title="Service locator pattern">Service locator</a></li>
<li><a href="Active_record_pattern" title="Active record pattern">Active record</a></li>
<li><a href="Identity_map_pattern" title="Identity map pattern">Identity map</a></li>
<li><a href="Data_access_object" title="Data access object">Data access object</a></li>
<li><a href="Data_transfer_object" title="Data transfer object">Data transfer object</a></li>
<li><a href="Inversion_of_control" title="Inversion of control">Inversion of control</a></li>
<li><a href="JSP_model_2_architecture" title="JSP model 2 architecture">Model 2</a></li>
<li><a href="Broker_pattern" title="Broker pattern">Broker</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other<br>patterns</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Blackboard_design_pattern" class="mw-redirect" title="Blackboard design pattern">Blackboard</a></li>
<li><a href="Business_delegate_pattern" title="Business delegate pattern">Business delegate</a></li>
<li><a href="Composite_entity_pattern" title="Composite entity pattern">Composite entity</a></li>
<li><a href="Dependency_injection" title="Dependency injection">Dependency injection</a></li>
<li><a href="Guard_(computer_science)" title="Guard (computer science)">Guard clause</a></li>
<li><a href="Intercepting_filter_pattern" title="Intercepting filter pattern">Intercepting filter</a></li>
<li><a href="Lazy_loading" title="Lazy loading">Lazy loading</a></li>
<li><a href="Mock_object" title="Mock object">Mock object</a></li>
<li><a href="Null_object_pattern" title="Null object pattern">Null object</a></li>
<li><a href="Object_pool_pattern" title="Object pool pattern">Object pool</a></li>
<li><a href="Servant_(design_pattern)" title="Servant (design pattern)">Servant</a></li>
<li><a href="Twin_pattern" title="Twin pattern">Twin</a></li>
<li><a href="Type_Tunnel_pattern" class="mw-redirect" title="Type Tunnel pattern">Type tunnel</a></li>
<li><a href="Method_chaining" title="Method chaining">Method chaining</a></li>
<li><a href="Delegation_pattern" title="Delegation pattern">Delegation</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Books</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><i><a href="Design_Patterns" title="Design Patterns">Design Patterns</a></i></li>
<li><i><a href="Enterprise_Integration_Patterns" title="Enterprise Integration Patterns">Enterprise Integration Patterns</a></i></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Christopher_Alexander" title="Christopher Alexander">Christopher Alexander</a></li>
<li><a href="Erich_Gamma" title="Erich Gamma">Erich Gamma</a></li>
<li><a href="Ralph_Johnson_(computer_scientist)" title="Ralph Johnson (computer scientist)">Ralph Johnson</a></li>
<li><a href="John_Vlissides" title="John Vlissides">John Vlissides</a></li>
<li><a href="Grady_Booch" title="Grady Booch">Grady Booch</a></li>
<li><a href="Kent_Beck" title="Kent Beck">Kent Beck</a></li>
<li><a href="Ward_Cunningham" title="Ward Cunningham">Ward Cunningham</a></li>
<li><a href="Martin_Fowler_(software_engineer)" title="Martin Fowler (software engineer)">Martin Fowler</a></li>
<li><a href="Robert_C._Martin" title="Robert C. Martin">Robert Martin</a></li>
<li><a href="Jim_Coplien" title="Jim Coplien">Jim Coplien</a></li>
<li><a href="Douglas_C._Schmidt" title="Douglas C. Schmidt">Douglas Schmidt</a></li>
<li><a href="Linda_Rising" title="Linda Rising">Linda Rising</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Communities</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="The_Hillside_Group" title="The Hillside Group">The Hillside Group</a></li>
<li><a href="Portland_Pattern_Repository" title="Portland Pattern Repository">Portland Pattern Repository</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">See also</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Anti-pattern" title="Anti-pattern">Anti-pattern</a></li>
<li><a href="Architectural_pattern" title="Architectural pattern">Architectural pattern</a></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="Smalltalk_programming_language438" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Smalltalk_programming_language438" style="font-size:114%;margin:0 4em"><a href="Smalltalk" title="Smalltalk">Smalltalk</a> programming language</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Software" title="Software">Software</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Programming_language_implementation" title="Programming language implementation">Implementations</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Major</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Amber_Smalltalk" title="Amber Smalltalk">Amber</a>°</li>
<li><a href="Dolphin_Smalltalk" title="Dolphin Smalltalk">Dolphin Smalltalk</a>°</li>
<li><a href="Gemstone_(database)" class="mw-redirect" title="Gemstone (database)">GemStone/S</a></li>
<li><i><a href="GNU_Smalltalk" title="GNU Smalltalk">GNU Smalltalk</a></i>°</li>
<li>Smalltalk/X</li>
<li><a href="Squeak" title="Squeak">Squeak</a>°
<ul><li><a href="Pharo" title="Pharo">Pharo</a>°</li></ul></li>
<li><i><a href="VisualAge" title="VisualAge">VisualAge</a> Smalltalk</i></li>
<li><a href="VisualWorks" title="VisualWorks">VisualWorks</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Dialect_(computing)" class="mw-redirect" title="Dialect (computing)">Dialects</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><i>F-Script</i>°</li>
<li><i><a href="Little_Smalltalk" class="mw-redirect" title="Little Smalltalk">Little Smalltalk</a></i>°</li>
<li><a href="Newspeak_(programming_language)" title="Newspeak (programming language)">Newspeak</a>°</li>
<li><i><a href="OMeta#OMeta/Squeak" title="OMeta">OMeta/Squeak</a></i>°</li>
<li><i>Pocket Smalltalk</i>°</li>
<li><a href="Self_(programming_language)" title="Self (programming language)">Self</a>°</li>
<li><i><a href="StepTalk" class="mw-redirect" title="StepTalk">StepTalk</a></i>°</li>
<li><i><a href="Strongtalk" title="Strongtalk">Strongtalk</a></i>°</li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Virtual_reality" title="Virtual reality">Virtual reality</a> <a href="Computing_platform" title="Computing platform">platforms</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><i><a href="Croquet_Project" title="Croquet Project">Croquet Project</a></i>° → <i><a href="Open_Cobalt" title="Open Cobalt">Open Cobalt</a></i>°</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Graphical_user_interface" title="Graphical user interface">Graphical user interfaces</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul>
<li><a href="Morphic_(software)" title="Morphic (software)">Morphic</a></li></ul>
</div></td></tr></tbody></table><div>
<ul><li><a href="AIDA/Web" title="AIDA/Web">AIDA/Web</a>°</li>
<li><a href="Gemstone_(database)" class="mw-redirect" title="Gemstone (database)">GemStone/S</a></li>
<li><a href="Moose_(analysis)" title="Moose (analysis)">Moose</a>°</li>
<li><a href="Seaside_(software)" title="Seaside (software)">Seaside</a>°</li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Workstation" title="Workstation">Workstation</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<li><i><a href="Xerox_Alto" title="Xerox Alto">Xerox Alto</a></i></li>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Community_of_practice" title="Community of practice">Community</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Business</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Cincom_Systems" title="Cincom Systems">Cincom Systems</a></li>
<li><a href="Gemstone_(database)" class="mw-redirect" title="Gemstone (database)">Gemstone</a></li>
<li><a href="IBM" title="IBM">IBM</a></li>
<li>Object Arts</li>
<li><a href="PARC_(company)" title="PARC (company)">Xerox PARC</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th id="Designers9" scope="row" class="navbox-group" style="width:1%">Designers</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="L._Peter_Deutsch" title="L. Peter Deutsch">L. Peter Deutsch</a></li>
<li><a href="Adele_Goldberg_(computer_scientist)" title="Adele Goldberg (computer scientist)">Adele Goldberg</a></li>
<li><a href="Dan_Ingalls" title="Dan Ingalls">Dan Ingalls</a></li>
<li><a href="Ted_Kaehler" title="Ted Kaehler">Ted Kaehler</a></li>
<li><a href="Alan_Kay" title="Alan Kay">Alan Kay</a></li>
<li><a href="Diana_Merry" title="Diana Merry">Diana Merry</a></li>
<li><a href="David_Ungar" title="David Ungar">David Ungar</a></li>
<li>Scott Wallace</li></ul>
</div></td></tr></tbody></table><div>
<ul><li><a href="Lars_Bak_(computer_programmer)" title="Lars Bak (computer programmer)">Lars Bak</a></li>
<li><a href="Gilad_Bracha" title="Gilad Bracha">Gilad Bracha</a></li>
<li><a href="Urs_H%C3%B6lzle" title="Urs Hölzle">Urs Hölzle</a></li>
<li><a href="Julian_Lombardi" title="Julian Lombardi">Julian Lombardi</a></li>
<li><a href="Mark_P._McCahill" title="Mark P. McCahill">Mark P. McCahill</a></li>
<li><a href="Andreas_Raab" class="mw-redirect" title="Andreas Raab">Andreas Raab</a></li>
<li><a href="David_P._Reed" title="David P. Reed">David P. Reed</a></li>
<li><a href="Trygve_Reenskaug" title="Trygve Reenskaug">Trygve Reenskaug</a></li>
<li><a href="David_A._Smith_(computer_scientist)" title="David A. Smith (computer scientist)">David Smith</a></li>
<li><a href="Larry_Tesler" title="Larry Tesler">Larry Tesler</a></li></ul></div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div>
<li><i>Italics</i> <b>= discontinued</b></li>
<li><b>° = <a href="Open-source_software" title="Open-source software">Open-source software</a></b><br><span class="noviewer" typeof="mw:File"></span> <b><a href="https://en.wikibooks.org/wiki/Smalltalk_Programming" class="extiw external" title="wikibooks:Smalltalk Programming">Book</a></b> <span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category</b></li>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-26" href="https://en.wikipedia.org/wiki/?title=Model%E2%80%93view%E2%80%93controller&oldid=1302581825">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>